import service from "./request";
import { ElMessageBox } from "element-plus";
import serviceV2 from "./requestV2";
import { showWarningToast } from "@/utils/common";

function imgCompress(img, Orientation) {
  // console.log(img, Orientation)
  const imgType = img.type;
  var newImg;

  let canvas = document.createElement("canvas");
  let ctx = canvas.getContext("2d");
  // 瓦片canvas
  let tCanvas = document.createElement("canvas");
  let tctx = tCanvas.getContext("2d");
  let initSize = img.src.length;
  let width = img.width;
  let height = img.height;
  // 如果图片大于四百万像素，计算压缩比并将大小压至400万以下
  let ratio;
  if ((ratio = (width * height) / 4000000) > 1) {
    console.log("大于400万像素");
    ratio = Math.sqrt(ratio);
    width /= ratio;
    height /= ratio;
  } else {
    ratio = 1;
  }
  canvas.width = width;
  canvas.height = height;
  // 铺底色
  ctx.fillStyle = "#fff";
  ctx.fillRect(0, 0, canvas.width, canvas.height);
  // 如果图片像素大于100万则使用瓦片绘制
  let count;
  if ((count = (width * height) / 1000000) > 1) {
    console.log("超过100W像素");
    count = ~~(Math.sqrt(count) + 1); // 计算要分成多少块瓦片
    //            计算每块瓦片的宽和高
    let nw = ~~(width / count);
    let nh = ~~(height / count);
    tCanvas.width = nw;
    tCanvas.height = nh;
    for (let i = 0; i < count; i++) {
      for (let j = 0; j < count; j++) {
        tctx.drawImage(
          img,
          i * nw * ratio,
          j * nh * ratio,
          nw * ratio,
          nh * ratio,
          0,
          0,
          nw,
          nh
        );
        ctx.drawImage(tCanvas, i * nw, j * nh, nw, nh);
      }
    }
  } else {
    ctx.drawImage(img, 0, 0, width, height);
  }
  // 修复ios上传图片的时候 被旋转的问题
  if (Orientation !== "" && Orientation !== 1) {
    switch (Orientation) {
      case 6: // 需要顺时针（向左）90度旋转
        this.rotateImg(img, "left", canvas);
        break;
      case 8: // 需要逆时针（向右）90度旋转
        this.rotateImg(img, "right", canvas);
        break;
      case 3: // 需要180度旋转
        this.rotateImg(img, "right", canvas); // 转两次
        this.rotateImg(img, "right", canvas);
        break;
    }
  }
  // 进行最小压缩
  let ndata = canvas.toDataURL("image/jpeg", 0.4);

  console.log("压缩前：" + initSize);
  console.log("压缩后：" + ndata.length);
  // console.log('ndata:' + JSON.stringify(ndata))

  console.log(
    "压缩率：" + ~~((100 * (initSize - ndata.length)) / initSize) + "%"
  );
  tCanvas.width = tCanvas.height = canvas.width = canvas.height = 0;
  return ndata;
}

// 浮点数转换出现多位问题
function NumberMul(arg1, arg2) {
  var m = 0;
  var s1 = arg1.toString();
  var s2 = arg2.toString();
  try {
    m += s1.split(".")[1].length;
  } catch (e) {}
  try {
    m += s2.split(".")[1].length;
  } catch (e) {}
  return (
    (Number(s1.replace(".", "")) * Number(s2.replace(".", ""))) /
    Math.pow(10, m)
  );
}

function downPic(pic) {
  // 下载图片到本地
  // window.open(this.qrcode + '?response-content-type=application/octet-stream');
  window.location.href =
    pic + "?response-content-type=application/octet-stream";
  //     // 第一种是打开新页面（推荐）
  //     // 第二种是在本页面跳转，虽然不会出现其它问题，但是网址会有明显变化
}

function copyText(value) {
  // 复制方法
  const element = document.createElement("textarea");
  document.body.appendChild(element);
  element.value = value;
  element.select();
  if (document.execCommand("copy")) {
    document.execCommand("copy");
    document.body.removeChild(element);
    return true;
  }
  document.body.removeChild(element);
  return false;
}

// 下载
function orderDownload(url, name) {
  ElMessageBox.confirm("下载当前数据", "温馨提示")
    .then(() => {
      serviceV2
        .get(`${url}`)
        .then(res => {
          console.log(res.data);
          if (!res.data) {
            // debugger;
            return showWarningToast("暂无数据下载哦~");
          }
          // size = 75 按异常处理了
          const blob = new Blob([res.data], {
            type: "application/vnd.ms-excel"
          }); // 把得到的结果用流对象转一下
          const fileName = name || "数据表.xls";
          if ("download" in document.createElement("a")) {
            // 非IE下载
            const elink = document.createElement("a");
            elink.download = fileName;
            elink.style.display = "none";
            elink.href = URL.createObjectURL(blob);
            document.body.appendChild(elink);
            elink.click();
            URL.revokeObjectURL(elink.href); // 释放URL 对象
            document.body.removeChild(elink);
          } else {
            // IE10+下载
            navigator.msSaveBlob(blob, fileName);
          }
        })
        .catch(error => {})
        .finally(() => {});
    })
    .catch(() => {
      console.log("取消");
    });
}

// export default
export default {
  imgCompress,
  downPic,
  copyText,
  NumberMul,
  orderDownload
};
